package com.jfastnet.messages; import com.esotericsoftware.kryo.Kryo; import com.jfastnet.AbstractTest; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import java.util.Random; import java.util.function.Supplier; /** @author Klaus Pfeiffer - klaus@allpiper.com */ @Slf4j public class CompressedMessageTest extends AbstractTest { private static int received; public static class Message1 extends Message { long value = 0; public Message1(long value) { this.value = value; } @Override public void process(Object context) { received++; } } public static class Message2 extends Message { long[] longArray; public Message2(long[] longArray) { this.longArray = longArray; } @Override public void process(Object context) { received++; } } @Test public void testCompressedMessages() { start(1); Message msg; log.info(" * Test with one additional long field value 0"); testWithMessage(() -> new Message1(1)); log.info(" * Test with one additional long field value Long.MAX_VALUE"); testWithMessage(() -> new Message1(Long.MAX_VALUE)); log.info(" * Test with long array field and random values"); testWithMessage(() -> new Message2(createLongArrayWithRandomValues(200))); } private void testWithMessage(Supplier<Message> messageSupplier) { received = 0; Message msg; msg = messageSupplier.get(); server.send(msg); log.info("Payload length uncompressed message: {}", msg.payloadLength()); waitForCondition("message not received.", 1, () -> received == 1); msg = CompressedMessage.createFrom(server.getState(), messageSupplier.get()); server.send(msg); log.info("Payload length compressed message: {}", msg.payloadLength()); waitForCondition("message not received.", 1, () -> received == 2); } private long[] createLongArrayWithRandomValues(int size) { Random random = new Random(System.currentTimeMillis()); long[] arr = new long[size]; for (int i = 0; i < size; i++) { arr[i] = random.nextLong(); } return arr; } @Override public void customizeKryo(Kryo kryo) { kryo.register(CompressedMessage.class); kryo.register(Message1.class); kryo.register(Message2.class); } }